package com.zxy.leetcode._00100_00199._00170_00179;

import java.util.Arrays;

/**
 * https://leetcode-cn.com/problems/largest-number/
 *
 * 179. 最大数
 *
 * 给定一组非负整数 nums，重新排列每个数的顺序（每个数不可拆分）使之组成一个最大的整数。
 * 注意：输出结果可能非常大，所以你需要返回一个字符串而不是整数。
 *
 */
public class Test00179 {

    public static void main(String[] args) {
        Test00179 test = new Test00179();
        int[] nums = {3,30,34,5,9};
        System.out.println(test.largestNumber(nums));
        System.out.println(test.largestNumber(nums).equals("9534330"));
    }

    public String largestNumber(int[] nums) {
        if (nums == null || nums.length == 0) {
            return "";
        }

        String[] strings = new String[nums.length];
        for (int i=0; i<nums.length; i++) {
            strings[i] = Integer.toString(nums[i]);
        }
        Arrays.sort(strings, (s1, s2) -> {
            if (s1.equals(s2)) {
                return 0;
            }

            return Long.parseLong(s2 + s1) - Long.parseLong(s1 + s2) > 0 ? 1 : -1;
        });

        if (strings[0].charAt(0) == '0') {
            return "0";
        }

        return String.join("", strings);

    }
}
